<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        padding: 0;
        margin: 0;
      }

      .wrap {
        width: 300px;
        margin: 100px auto 0;
      }

      table {
        border-collapse: collapse;
        border-spacing: 0;
        border: 1px solid #c0c0c0;
        width: 300px;
      }

      th,
      td {
        border: 1px solid #d0d0d0;
        color: #404060;
        padding: 10px;
      }

      th {
        background-color: #09c;
        font: bold 16px '微软雅黑';
        color: #fff;
      }

      td {
        font: 14px '微软雅黑';
      }

      tbody tr {
        background-color: #f0f0f0;
      }

      tbody tr:hover {
        cursor: pointer;
        background-color: #fafafa;
      }
    </style>
  </head>
  <body>
    <div class="wrap">
      <table>
        <thead>
          <tr>
            <th>
              <input type="checkbox" id="j_cbAll" />
            </th>
            <th>商品</th>
            <th>价钱</th>
          </tr>
        </thead>
        <tbody id="j_tb">
          <tr>
            <td>
              <input type="checkbox" />
            </td>
            <td>iPhone8</td>
            <td>8000</td>
          </tr>
          <tr>
            <td>
              <input type="checkbox" />
            </td>
            <td>iPad Pro</td>
            <td>5000</td>
          </tr>
          <tr>
            <td>
              <input type="checkbox" />
            </td>
            <td>iPad Air</td>
            <td>2000</td>
          </tr>
          <tr>
            <td>
              <input type="checkbox" />
            </td>
            <td>Apple Watch</td>
            <td>2000</td>
          </tr>
        </tbody>
      </table>
    </div>

    <script>
      var j_cbAll = document.querySelector('#j_cbAll')
      var checks = document.querySelectorAll('#j_tb input')
      //上面的
      //如果上面被选中，那么下面全选；如果没有，下面全不选
      j_cbAll.onclick = function () {
        for (var i = 0; i < checks.length; i++) {
          checks[i].checked = j_cbAll.checked
        }
      }

      //下面的
      for (var j = 0; j < checks.length; j++) {
        checks[j].onclick = function () {
          //如果下面全部被选中了，那么上面被选中； 如果下面有一个没被选，那么上面就不选
          var checksLength = checks.length
          //获取被选中的个数 利用:checked选择器来获取  被选中的长度k
          var checkedLength = document.querySelectorAll('tbody input:checked').length
          //   console.log(checkedLength)
          //如果选中的个数和总数相等，那么上面的就被选中 true
          //   if (checkedLength === checksLength) {
          //     j_cbAll.checked = true
          //   }
          j_cbAll.checked = checkedLength === checksLength
        }
      }
    </script>
  </body>
</html>
